
noinst_LTLIBRARIES =
check_LTLIBRARIES =
pkglib_LTLIBRARIES =
noinst_HEADERS =
check_PROGRAMS =
pkglibexec_PROGRAMS =
EXTRA_DIST =
CLEANFILES =

SUBDIRS = .
TESTS =

dist_noinst_SCRIPTS = module.rc.in
EXTRA_LTLIBRARIES =

if HAVE_RUST

LIBTOOL_CARGO_EXE = $(abs_srcdir)/libtool_cargo.sh

CARGO_BUILD_ARGS = --target=@RUST_TARGET@ --release \
	--crate-type=staticlib

RUSTFLAGS = -C panic=abort -C opt-level=z
if !HAVE_DYNAMIC_PLUGINS
RUSTFLAGS += --cfg vlc_static_plugins
endif

LIBTOOL_CARGO = \
	TARGET_CC=$(CC) TARGET_AR=$(AR) \
	TARGET_CFLAGS="$(CFLAGS)" \
	RUSTTARGET="@RUST_TARGET@" \
	RUSTFLAGS="${RUSTFLAGS}" \
	CARGO_TARGET_DIR="target-rust" \
	LIBTOOL="$(LIBTOOL)" \
	$(LIBTOOL_CARGO_EXE) $(CARGO) $(CARGO_BUILD_STD) rustc $(CARGO_BUILD_ARGS)

CARGO_PLUGINS_INV = ${LTLIBRARIES:%rs_plugin.la=%rs_plugin}
CARGO_PLUGINS_CUT = ${CARGO_PLUGINS_INV:%.la=}
CARGO_PLUGINS = ${CARGO_PLUGINS_CUT:%=%.la}

CARGO_DEPS = ${CARGO_PLUGINS:%_plugin.la=${top_builddir}/modules/.libs/%.d}

-include $(CARGO_DEPS)

# Clean the targets generated by cargo.
mostlyclean-local: mostlyclean-local-rust
.PHONY: mostlyclean-local-rust
# We don't use CLEANFILES here so that mostlyclean-local-rust
# works correctly when called directly. Otherwise, dependencies
# are leading to target being referenced but they cannot be built.
mostlyclean-local-rust:
	rm -rf $(CARGO_DEPS) ${CARGO_PLUGINS:%_plugin.la=%.la}
	$(CARGO) clean \
		--manifest-path "${srcdir}/Cargo.toml" \
		--target "@RUST_TARGET@" \
		--target-dir "target-rust"
endif

include common.am
include access/Makefile.am
include access/http/Makefile.am
include access/rtp/Makefile.am
include access/rtp/test/Makefile.am
include audio_filter/Makefile.am
include audio_mixer/Makefile.am
include audio_output/Makefile.am
include codec/Makefile.am
include control/Makefile.am
include demux/Makefile.am
include gui/Makefile.am
include hw/nvdec/Makefile.am
include hw/d3d9/Makefile.am
include hw/d3d11/Makefile.am
include hw/vaapi/Makefile.am
include hw/vdpau/Makefile.am
include hw/mmal/Makefile.am
include isa/aarch64/Makefile.am
include isa/arm/Makefile.am
include isa/riscv/Makefile.am
include keystore/Makefile.am
include logger/Makefile.am
include lua/Makefile.am
include meta_engine/Makefile.am
include misc/Makefile.am
include notify/Makefile.am
include packetizer/Makefile.am
include services_discovery/Makefile.am
include spu/Makefile.am
include stream_filter/Makefile.am
include stream_extractor/Makefile.am
include text_renderer/Makefile.am
include video_chroma/Makefile.am
include video_filter/Makefile.am
include video_splitter/Makefile.am
include video_output/Makefile.am
include visualization/Makefile.am
if ENABLE_SOUT
include access_output/Makefile.am
include mux/Makefile.am
include stream_out/Makefile.am
endif

if HAVE_WIN32
BUILT_SOURCES += module.rc.lo
CLEANFILES += module.rc
#noinst_DATA = module.rc.lo

module.rc: module.rc.in $(top_builddir)/config.status
	$(AM_V_GEN) cd "$(top_builddir)" && $(SHELL) ./config.status --file="modules/$@"

module.rc.lo: module.rc
	$(AM_V_GEN) $(LIBTOOL) --tag=RC --mode=compile $(WINDRES) \
		--include-dir $(top_srcdir)/share \
		--include-dir $(top_srcdir)/extras/package/win32 \
		-i $< -o $@
endif

# Wayland
SUFFIXES += -client-protocol.h -protocol.c .xml

.xml-client-protocol.h:
	$(AM_V_GEN)$(WAYLAND_SCANNER) client-header < "$^" > "$@.tmp"
	$(AM_V_at)mv -f -- "$@.tmp" "$@"

.xml-protocol.c:
	$(AM_V_GEN)$(WAYLAND_SCANNER) private-code < "$^" > "$@.tmp"
	$(AM_V_at)mv -f -- "$@.tmp" "$@"

# Remove the non-plugins, it needs intermediate steps because
# we can only replace and not match inverse. Instead we;
#  1/ replace plugins .la targets by plugins names
#  2/ remove every word which is a .la target (ie. non-plugins)
#  3/ rename every plugin name back into the target name
ALL_TARGETS_PLUGIN_RENAMED := $(LTLIBRARIES:lib%_plugin.la=%_plugin)
PLUGINS_NAMES := $(ALL_TARGETS_PLUGIN_RENAMED:%.la=)

# Generate a list containing the name of every plugin being built
# Note that it cannot include plugins from recursive makefiles,
# like the Qt plugin.
vlc_modules_list: Makefile
	$(AM_V_GEN)rm -f $@.tmp; for plugin in $(PLUGINS_NAMES); do \
		printf "$${plugin}\n" >> $@.tmp; done && \
		mv $@.tmp $@

BUILT_SOURCES += vlc_modules_list
CLEANFILES += vlc_modules_list
